/**
 * @author: 團長
 * @date: 2013-9-17-上午9:49:03
 */
package net.loyintean.pearlshell.base.model.impl;

import java.util.List;

import net.loyintean.pearlshell.base.model.IResult;

/** 操作结果实例工厂。提供实例的创建和加工方法
 * <p>
 * 2013年09月17日 当前版本只针对{@link IResultSetter}类操作
 * 
 * @author 團長
 * @since 2013-9-17
 * @version 1.0.0 */
@Deprecated
public final class ResultFactory {

	/** 使用入参数据，初始化一个操作结果。该结果的操作状态为{@link ResultStatusEnum#INIT}
	 * ；数据为入参data；message为{@link ResultStatusEnum#INIT.name()}，exception为
	 * {@link NoExceptionHappend}
	 * <p>
	 * 实际返回的是{@link ResultImpl}的实例。在操作过程中其data和exception不允许为null
	 * 
	 * @author 團長
	 * @since 2013-9-17
	 * @param data
	 * @return IResult的一个默认实现类。其数据为data，其状态为初始化状态。 */
	public static final <T> IResult<T> INIT(final T data) {
		assert data != null;

		ResultImpl<T> result = new ResultImpl<T>(data);
		// 空指针异常实际在这个位置抛出
		// result.setData(data);
		return result;
	}

	/** 为List的泛型提供初始化操作。
	 * <p />
	 * 2013-11-5 团长 容器类的泛型初始化比较麻烦，所以干脆重载一个
	 * <p>
	 * 实际返回的是{@link ResultImpl}的实例。在操作过程中其data和exception不允许为null
	 * 
	 * @author 團長
	 * @since 2013-11-1
	 * @param data
	 * @return */
	public static final <T> IResult<List<T>> INIT(final List<T> data) {
		assert data != null;

		ResultImpl<List<T>> result = new ResultImpl<List<T>>(data);
		// 空指针异常实际在这个位置抛出
		// result.setData(data);
		return result;
	}

	/** init a IResult without data. so, if need to read data, you must success
	 * it.
	 * <p>
	 * 实际返回的是{@link ResultAllowNullImpl}的实例。在操作过程中其data和exception允许为null。
	 * 
	 * @author 團長
	 * @since 2014-2-12
	 * @return */
	public static final <T> IResult<T> INIT() throws NullPointerException {

		ResultImpl<T> result = new ResultImpl<T>();
		return result;
	}
}
